package com.qianbei.common.image;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
import android.view.View;
import android.widget.ImageView;

import com.bumptech.glide.DrawableRequestBuilder;
import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestManager;
import com.bumptech.glide.request.target.BitmapImageViewTarget;
import com.bumptech.glide.util.Util;
import com.qianbei.R;
import com.qianbei.common.utilis.img.CropCircleTransformation;

import java.io.File;

/**
 *
 * Glide 图片加载
 *
 * @author jiaowenzheng
 * Created by user on 16/5/26.
 */
public class GlideImageLoader implements ImageLoader {

    /**
     * 加载本地图片
     *
     * @param context   上下文环境
     * @param imageView View对象
     * @param imageFile 图片路径
     * @param option    build参数
     */
    @Override
    public void displayImage(Context context,ImageView imageView, File imageFile, Builder option) {
        displayImageAction(context,imageView,imageFile.getAbsolutePath(),option);
    }

    /**
     * 加载网络图片
     *
     * @param context   上下文环境
     * @param imageView View对象
     * @param imageUrl  图片地址
     * @param option    build参数
     */
    @Override
    public void displayImage(Context context,ImageView imageView, String imageUrl,Builder option) {
        displayImageAction(context,imageView,imageUrl,option);
    }

    @Override
    public void displayImage(Context context, ImageView imageView, String imageUrl) {
        Glide.with(context)
                .load(imageUrl)
                .placeholder(R.drawable.ic_launcher)
                .bitmapTransform(new CropCircleTransformation(context))
                .into(imageView);
    }

    @Override
    public void displayImage(Context context, ImageView imageView, int imageUrl) {
        Glide.with(context)
                .load(imageUrl)
                .placeholder(R.drawable.ic_launcher)
                .bitmapTransform(new CropCircleTransformation(context))
                .into(imageView);
    }

    /**
     * 操作
     *
     * @param context   上下文环境
     * @param imageView View对象
     * @param imageUrl  图片地址
     * @param option    build参数
     */
    private void displayImageAction(final Context context, final ImageView imageView, String imageUrl,
                                    final Builder option){

        //如果当前线程不是在ui线程或者option为空的情况下则不加载图片。
        if (!Util.isOnMainThread() || option == null) {
            return;
        }

        RequestManager requestManager = Glide.with(context);
        DrawableRequestBuilder builder = requestManager.load(imageUrl);

        builder.placeholder(option.loadingResId);           //默认加载图
        builder.error(option.loadErrorResId);               //图片下载失败默认图

        if (option.transformation != null) { //自定义transformation
            builder.bitmapTransform(option.transformation);
        }

        builder.into(new BitmapImageViewTarget(imageView) {
            @Override
            protected void setResource(Bitmap resource) {
                bitmapImageViewAction(option,context.getResources(),imageView,resource);
            }
        });
    }


    /**
     * 对bitmap imageView 进行一系列的操作
     *
     * @param option        图片参数
     * @param resource      资源
     * @param imageView     imageView对象
     * @param bitmap        bitmap
     */
    public void bitmapImageViewAction(Builder option,Resources resource, ImageView imageView, Bitmap bitmap){
        if (option.isCircle) { //创建圆形图片
            createCircleBitmap(resource, imageView, bitmap);
        }

        if (option.isAdaptive){ //根据屏幕的宽高自适应
            adaptivePicture(resource,imageView,bitmap);
        }
    }


    /**
     * 创建圆形图片
     *
     * @param resource      资源
     * @param imageView     imageView对象
     * @param bitmap        bitmap
     */
    public void createCircleBitmap(Resources resource, ImageView imageView, Bitmap bitmap) {
        RoundedBitmapDrawable circularBitmapDrawable =
                RoundedBitmapDrawableFactory.create(resource, bitmap);
        circularBitmapDrawable.setCircular(true);
        imageView.setImageDrawable(circularBitmapDrawable);
    }

    /**
     * 图片自适应
     *
     * @param resource      资源
     * @param imageView     imageView对象
     * @param bitmap        bitmap
     */
    public void adaptivePicture(Resources resource, ImageView imageView, Bitmap bitmap) {

        int screenWidth = resource.getDisplayMetrics().widthPixels;
        int bitmapWidth = bitmap.getWidth();

        if (bitmapWidth > screenWidth) {
            imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
        } else {
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        }
        imageView.setImageBitmap(bitmap);
    }

    /**
     * activity 结束则清除Glide中所有的任务
     *
     * @param view
     */
    public void cleanGlideTask(View view){
        if (Util.isOnMainThread()){
//            Glide.with(context).onDestroy();
            Glide.clear(view);
        }
    }


}
